#pragma once
#include<mutex>
#include"util.hpp"
//单例类
namespace cloud
{
    #define CONFIG_FILENAME "./cloud.conf"
    class Config
    {
        private:
        Config()
        {
            ReadConfigFile();
        }
        static Config* _instance;
        static std::mutex _mutex;

        int _hot_time;
        int _server_port;
		std::string _server_ip;
		std::string _download_prefix;
		std::string _packfile_suffix;
		std::string _pack_dir;
		std::string _back_dir;
		std::string _backup_file;

        bool ReadConfigFile()
        {
            FileUtil fl(CONFIG_FILENAME);
            std::string str;
            fl.GetContent(&str);
            Json::Value root;
            JsonFile::UnSerialize(str,&root);
            _hot_time = root["hot_time"].asInt();
			_server_port = root["server_port"].asInt();
		    _server_ip = root["server_ip"].asString();
			_download_prefix = root["download_prefix"].asString();
			_packfile_suffix = root["packfile_suffix"].asString();
			_pack_dir = root["pack_dir"].asString();
			_back_dir = root["back_dir"].asString();
			_backup_file = root["backup_file"].asString();
			return true;

        }
        public:
        static Config* GetInstance()
        {
            if(_instance==nullptr)
            {
                _mutex.lock();
                if(_instance==nullptr)
                {
                    _instance=new Config;
                }
                _mutex.unlock();
            }
            return _instance;
        }
        int GetHotTime() {
				return _hot_time;
			}
		int GetServerPort() {
				return _server_port;
			}
		std::string GetServerIp() {
				return _server_ip;
			}
		std::string GetDownloadPrefix() {
				return _download_prefix;
			}
		std::string GetPackFileSuffix() {
				return _packfile_suffix;
			}
		std::string GetPackDir() {
				return _pack_dir;
			}
		std::string GetBackDir() {
				return _back_dir;
			}
		std::string GetBackupFile() {
				return _backup_file;
			}


    };
    Config*Config::_instance=nullptr;
    std::mutex Config::_mutex;
}